"""
日志工具模块

本模块提供了程序的日志记录功能，包括：
1. 控制台输出
2. 文件记录
3. 不同级别的日志分类
4. 格式化的日志信息

作者：[您的名字]
日期：[创建日期]
"""

import os
import logging
from pathlib import Path
from datetime import datetime

def setup_logger(
    log_level: int = logging.INFO,
    log_file: str = None,
    console_level: int = None,
    file_level: int = logging.DEBUG
) -> logging.Logger:
    """
    设置日志记录器
    
    参数:
        log_level (int): 全局日志级别
        log_file (str): 日志文件路径，默认为None（自动生成）
        console_level (int): 控制台输出的日志级别，默认为全局日志级别
        file_level (int): 文件记录的日志级别
        
    返回:
        logging.Logger: 配置好的日志记录器
    """
    # 创建logger对象
    logger = logging.getLogger('TwoFluidSCA')
    logger.setLevel(log_level)
    
    # 如果logger已经有处理器，则不重复添加
    if logger.handlers:
        return logger
    
    # 创建格式化器
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    
    # 设置控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(console_level if console_level is not None else log_level)
    console_handler.setFormatter(formatter)
    logger.addHandler(console_handler)
    
    # 设置文件处理器
    if log_file is None:
        # 自动生成日志文件路径
        log_dir = Path(__file__).parent.parent.parent / 'logs'
        log_dir.mkdir(exist_ok=True)
        log_file = log_dir / f'sca_{datetime.now().strftime("%Y%m%d_%H%M%S")}.log'
    
    try:
        file_handler = logging.FileHandler(str(log_file), encoding='utf-8')
        file_handler.setLevel(file_level)
        file_handler.setFormatter(formatter)
        logger.addHandler(file_handler)
        
        logger.info(f"日志系统初始化完成，日志文件：{log_file}")
    except Exception as e:
        logger.error(f"创建日志文件失败: {str(e)}")
        logger.warning("将只使用控制台输出")
    
    return logger

def get_logger() -> logging.Logger:
    """
    获取已配置的日志记录器
    
    返回:
        logging.Logger: 日志记录器实例
    """
    return logging.getLogger('TwoFluidSCA') 